代码级干货分享 | Docker+Tsung百万并发压测实践
1 百万压测使用TSUNG的背景信息
数人云此次通过清华OCP实验室的机器进行100w压测,之前使用的 locust 对于超线程支持以及本身性能问题(python),无法在现有硬件资源基础上达到需求,所以改用Tsung进行测试。
2 什么是TSUNG
参考Tsung 1.6.0 中文手册 参考Tsung 1.6.0 documentation
3 配置文件使用
参考配置文件
4 架构说明
4.1 架构图
4.2 架构图解释
tsung master 通过 ssh 对 slave 操作,集群之间通讯使用的是 erlang 的 epmd.
执行步骤:
首先将 tsung 进行 docker mesos化
安装 ssh
安装 tsung
配置文件 mesos 化
其次调用数人云 api 将 tsung 发布
api 调用脚本
4.3 加压结构
4.4 程序架构说明
tsung 是个分布式的压测工具,已单个硬件作为程序说明。
每个 tsung 的客户端就是一个 slave 主机,单 ip 可以承载 6 w 压力,对于普通服务器压力瓶颈在 cpu
每个 slave 上的 cpu 就是 tsung node(节点),虽然erlang 支持 smp 但是官方手册说明想要好性能,必须划分cpu
每个 node 上面可以承载很多个虚拟用户
slave 可以平扩,增大加压端
5 部署
( 以下省略代码部分,详细请点击“阅读原文”查看文档。)
5.1 TSUNG DOCKER 基础构建
5.2 TSUNG DOCKER 构建
5.3 发布 TSUNG
5.3.1 configserver 文件准备
5.3.2 数人云 API 准备
5.3.3 发布 configserver 脚本
5.3.4 发布 tsung-slave 脚本
5.3.5 发布承压服务脚本(镜像可用nginx代替)
5.3.6 生成用力
5.3.7 发布 tsung-master 脚本
5.3.8 设置权限
5.3.9 数人云 api 发布流程
检查 configserver 文件准备
ssh 秘钥对(注意权限)
filelist 下载配置列表
ssh_config
数人云 API 准备
变量抽离
获取数人云 TOKEN
发布 configserver
发布 tsung-slave
发布承压服务
生成用力
获取 marathon task ID
tsung.xml
生成压测用力脚本
检查用力文
发布 tsung master
登陆 数人云查看 master 启动结果
登陆 tsung 实时压测页面进行查看压测结果
游览器检查
游览器打开:
http://$TSUNG_MASTER_IP:8091
查看压测结果,机器越多需要等待时间越长,因为需要加载服务。日志检查
进入数人云日志查询 -> 选择集群名 -> 选择应用名 -> 点击查询,看到如下日志,说明正常运行。
6 注意事项
每个压力测试机单ip加压6W,可以通过增加ip数量增大这个值
加压力端需要调节文件句柄
集群大的时候,有时候用力一次加载不上,需要重复加载,问题未知
时间服务很重要
master 当机可能是因为 slave 端 ssh 异常,检查
centos 镜像 ssh 服务不兼容主机ubuntu aufs 存储问题
7 最终百万压测
7.1 配置
加压端
tsung 客户端加压机
数量 1
cpu 40核超线程
mem 141G
network 万兆网络
完全没瓶颈
docker host模式
docker 下发1个(每台1个)
tsung 控制器
数量 20
cpu 40核超线程
mem 141G
network 万兆网络
cpu 消耗 不到瓶颈
docker host模式
docker 下发20个(每台1个)
转发
haproxy
数量 4
cpu 48核超线程
mem 141G
network 万兆网络
cpu 消耗超高-瓶颈
内存消耗 将尽20g
实体模式
承压
nginx
数量 6
cpu 32核超线程
mem 141G
network 万兆网络
cpu 消耗超高
mem 消耗10g
docker nat模式
docker 下发48个(每台8个,折算48w并发连接)
7.2 最终结果
数人云用Tsung模拟每秒钟100万个用户的并发请求
纵坐标- 绿色代表用户数,蓝色代表链接数
横坐标- 时间轴,单位秒
Tsung百万并发下的处理能力
横坐标- 时间轴,单位秒
小数提示:点击下方“阅读原文”可查看完整文档。
数人云
将应用弹性做到极致